export function renderMixin(Vue) {

    Vue.prototype._c = function () {
        // 创建标签
        return createElement(...arguments)
    }
    Vue.prototype._v = function (text) {
        return createText(text)
    }

    // 处理变量
    Vue.prototype._s = function (val) {
        return val == null ? "" : (typeof val === 'object') ? JSON.stringify(val) : val
    }

    // render函数变成虚拟节点
    Vue.prototype._render = function () {
        let vm = this
        // 获取render方法
        let render = vm.$options.render
        // 调用render方法生成虚拟dom
        let vnode = render.call(this)

        return vnode
    }
}

function createElement(tag, data = {}, ...children) {
    return vnode(tag, data, data.key, children)
}

// tag：标签名
// data：标签的所有属性数据
// key：标识作用，后面做diff算法需要
// children：孩子
// text：文本
function vnode(tag, data, key, children, text) {
    return {
        tag,
        data,
        key,
        children,
        text
    }
}

function createText(text) {
    return vnode(undefined, undefined, undefined, undefined, text)
}